package tenant_common

import (
	"context"
	"google.golang.org/grpc"
	"gorm.io/gorm"
)

//
//func NewUnaryServerInterceptor(o ...grpc.ServerOption) grpc.UnaryServerInterceptor {
//	return func(
//		ctx context.Context,
//		req interface{},
//		info *grpc.UnaryServerInfo,
//		handler grpc.UnaryHandler,
//	) (resp interface{}, err error) {
//		ctx, db, err := GetTenantDBAndContext(ctx)
//		if err != nil {
//			return nil, err
//		}
//
//		//grpc 退出释放db连接
//		defer func() {
//			if db == nil {
//				return
//			}
//			sqlDB, err := db.DB()
//			if err == nil && sqlDB != nil {
//				_ = sqlDB.Close()
//			}
//		}()
//
//		return handler(ctx, req)
//	}
//}

func TenantDBHandleGRPC(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
	var db *gorm.DB
	var err error
	//grpc 退出释放db连接
	defer func() {

		if db == nil {
			return
		}

		sqlDB, err := db.DB()
		if err == nil && sqlDB != nil {
			_ = sqlDB.Close()
		}
	}()
	// 注意，不能用 := 否则变成临时变量
	ctx, db, err = GetTenantDBAndContext(ctx)
	if err != nil {
		return nil, err
	}

	return handler(ctx, req)
}